package br.cesed.facisa.si.tap.projetos.estagio1.entidades;

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class Locacao
{
    private static final int PRAZO_PADRAO_DEVOLUCAO = 3;

    /**
     * Filme que est� locado.
     */
    private Filme filme;

    /**
     * Cliente que locou o filme.
     */
    private Cliente cliente;

    /**
     * Data em que a loca��o foi realizada.
     */
    private Date dataLocacao;

    /**
     * Indicador de pagamento da loca��o.
     */
    private boolean pago;

    /**
     * Prazo para devolu��o em quantidade de dias.
     */
    private int prazoDevolucao;

    public Locacao( Filme filme, Cliente cliente )
    {
        this.filme = filme;
        this.cliente = cliente;
        dataLocacao = new Date(  ); //Data da loca��o � a data e hora atuais do sistema
        pago = false;
        prazoDevolucao = PRAZO_PADRAO_DEVOLUCAO;
    }

    public Filme getFilme(  )
    {
        return filme;
    }

    public void setFilme( Filme filme )
    {
        this.filme = filme;
    }

    public Cliente getCliente(  )
    {
        return cliente;
    }

    public void setCliente( Cliente cliente )
    {
        this.cliente = cliente;
    }

    public Date getDataLocacao(  )
    {
        return dataLocacao;
    }

    public void setDataLocacao( Date dataLocacao )
    {
        this.dataLocacao = dataLocacao;
    }

    public boolean isPago(  )
    {
        return pago;
    }

    public void setPago( boolean pago )
    {
        this.pago = pago;
    }

    public int getPrazoDevolucao(  )
    {
        return prazoDevolucao;
    }

    public void setPrazoDevolucao( int prazoDevolucao )
    {
        this.prazoDevolucao = prazoDevolucao;
    }

    /**
     * Este m�todo verifica se a loca��o est� atrasada.
     */
    public boolean isAtrasado(  )
    {
        Calendar calendarioAtual = GregorianCalendar.getInstance(  );
        Calendar calendarioPrazoFinal = GregorianCalendar.getInstance(  );
        calendarioPrazoFinal.setTime( dataLocacao );
        calendarioPrazoFinal.add( Calendar.DAY_OF_MONTH,
                                  this.getPrazoDevolucao(  ) );

        return calendarioAtual.compareTo( calendarioPrazoFinal ) > 0;
    }
}
